package com.springbootblog.controller.fontend.thread;

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class DfileThreadController extends Thread
{
    /**
     * 图片地址
     */
    private String url;
    /**
     * 图片名称
     */
    private String name;

    /**
     * 构造方法
     * @param url
     * @param name
     */
    public DfileThreadController(String url, String name)
    {
        this.url = url;
        this.name = name;
    }

    /**
     * 重写run方法
     */
    @Override
    public void run()
    {
        System.out.println("DfileThreadController");
        // 实例化下载方法
        WebDownloader webDownloader = new WebDownloader();
        // 执行下载方法
        webDownloader.downloader(url, name);
        // 打印下载结果
        System.out.println("下载文件成功："+name);
    }

    /**
     * 主方法
     * @param args
     */
    public static void main(String[] args)
    {
        // ========================================================================
        // 注意，我这里下载的是同一张图片，我这里同时开启三个线程下载同一张图片，如果是依次执行，则下载顺序是1/2/3  如果是多线程依次执行，那么下载顺序就是一个玄学了。
        // 实例化第一个线程类
        DfileThreadController dfileThreadController1 = new DfileThreadController("https://resource.guanchao.site/uploads/atricle/20240717/6f3d3f8fb88a967650c33a9f5d12187e.jpg","1.jpg");
        // 实例化第二个线程类
        DfileThreadController dfileThreadController2 = new DfileThreadController("https://resource.guanchao.site/uploads/atricle/20240717/6f3d3f8fb88a967650c33a9f5d12187e.jpg","2.jpg");
        // 实例化第三个线程类
        DfileThreadController dfileThreadController3 = new DfileThreadController("https://resource.guanchao.site/uploads/atricle/20240717/6f3d3f8fb88a967650c33a9f5d12187e.jpg","3.jpg");
        // 启动第一个线程下载
        dfileThreadController1.start();
        // 启动第二个线程下载
        dfileThreadController2.start();
        // 启动第三个线程下载
        dfileThreadController3.start();
    }

    /**
     * 下载类
     */
    class WebDownloader
    {
        public void downloader(String url ,String name)
        {
            try
            {
                // 执行下载
                FileUtils.copyURLToFile(new URL(url),new File(name));
            }
            catch (IOException e)
            {
                e.printStackTrace();
                System.out.println("downloader方法出现异常！");
            }
        }
    }
}
